package com.clstu.ploy_.danymic;

public class Danymic {
    public static void main(String[] args) {
        A a=new B();                  //编译类型A 运行类型B，方法还是先调用B的方法，如果B没有则调用父类的方法
        System.out.println(a.sum());//40//通过断点调试F7看到底调用的哪一个类的sum方法
        System.out.println(a.sum1());//30
        //动态绑定机制，
        // 调用方法先调用运行类型的方法，如果没有则向上查找，
        //动态调用方法如果有嵌套调用，则又从运行类型开始向上查找，
        //调用属性则是从函数声明的地方调用，用的是哪个类的方法，就用哪个类的对于属性，
    }
}

class A{
     public int i=10;
     public int getI(){
         return i;
     }
     public int sum(){
         return i+10;
     }
     public int sum1(){
         return getI()+10;
     }
}

class B extends A{
    public int i=20;
    public int getI(){
        return i;
    }
    public int sum(){
        return i+20;
    }
    public int sum1(){
        return getI()+10;
    }
}
